package com.lz.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 同源策略：
 * 异步请求在发送服务时,浏览器会检查服务端的"访问协议","IP地址","端口号"是否与当前服务保持一致
 * http与https不是同一个协议
 * localhost与127.0.0.1不是一个IP
 *
 * 通过设置响应头的方式配置跨域处理
 */
@Configuration
public class CorsConfig {

    /**
     * 通过,过滤器的方式配置跨域处理
     * @return
     */
    @Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //设置访问源地址
        corsConfiguration.addAllowedOrigin("*");
        //设置访问源请求方法
        corsConfiguration.addAllowedMethod("*");
        //设置访问源请求头
        corsConfiguration.addAllowedHeader("*");
        //设置响应头,允许后台向前台暴露响应头部信息
        corsConfiguration.addExposedHeader("Authorization");
        //设置访问源是否允许携带凭证
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.setMaxAge(3600L);
        //对接口配置跨域设置
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }

}
